到今天為止介紹了不少應用於k8s上的服務,並且大部分都可以透過operator的方式進行同性質的服務的佈署,那麼如果同性質的服務想要提供給外部存取就會控管上的問題,因此多了一道api gateway的服務出現了,api gateway提供給外部存取者k8s上服務的service discovery、權限控管、限流等等功能,並且讓外部可以透過一個統一入口進入。
有很多種實現api gateway的方法,實際上istio也可以做到大部分的功能,不過今天會以kong api gateway這個專案來實作,kong在實作上主要依賴四個核心項目的定義來運作,分別是upstream、target、service、route,其中有幾個名詞是對應的像是upstream會對應1到多個target,route則是一對一個service,將需要透過kong進入的服務註冊後就可以讓kong提供給外部使用了,同時kong做為api gateway的解決方案也提供了相當多的功能如下。
引入api gateway後其實對外的服務最大的優勢就是可以透過單一入口,或是某些已經設計過的入口(多組api gateway service)進來,並且由kong plugin去告訴controller每個kong的服務要如何管理流量配置,但是在加入api gateway的架構中會發現入口到底要從原本的istio ingress 還是kong ingress呢?這時可以透過兩種方法解決,其一是透過kong 進入然後由istio進行服務的轉送,概念會如下圖,或是改走kong mesh的做法,由kong所提供的service mesh做內部的服務轉送。